define([
		'angular',
		'lodash'
	],
	function (angular, _) {
		'use strict';

		var module = angular.module('grafana.services');

		module.service('timer', function ($timeout) {
			// This service really just tracks a list of $timeout promises to give us a
			// method for cancelling them all when we need to

			var timers = [];

			this.register = function (promise) {
				timers.push(promise);
				return promise;
			};

			this.cancel = function (promise) {
				timers = _.without(timers, promise);
				$timeout.cancel(promise);
			};

			this.cancel_all = function () {
				_.each(timers, function (t) {
					$timeout.cancel(t);
				});
				timers = [];
			};
		});

	});